package javase_class_250906;

/**
 * ClassName: LazySingleton
 * Package: javase_class_250906
 * Description:
 *
 * @Author harkjeans
 * @Create 2025/9/6 22:50
 * @Version 1.0
 */
/**
 * 懒汉式 - 双重检查锁
 * 优点：线程安全，延迟加载，效率较高
 * 缺点：代码相对复杂，需要理解volatile的作用
 */
public class LazySingleton {
    // 使用volatile防止指令重排序，保证可见性
    private static volatile LazySingleton instance;

    private LazySingleton() {
        System.out.println("LazySingleton instance created!");
    }

    public static LazySingleton getInstance() {
        // 第一次检查，避免不必要的同步
        if (instance == null) {
            // 同步代码块
            synchronized (LazySingleton.class) {
                // 第二次检查，确保线程安全
                if (instance == null) {
                    instance = new LazySingleton();
                }
            }
        }
        return instance;
    }

    public void showMessage() {
        System.out.println("Hello from LazySingleton!");
    }
}
